/* 杂项 */
// 颜色
type Colors = 'red'|'blue'| 'green' | 'yellow'

/* 全局记忆 */ 
interface Memory
{
    showTime?:boolean
    // 要绕过的房间名列表，由全局模块 bypass 负责。
    bypassRooms: string[]
    whitesheets: string[]
    friendsheets: string[]
    frameRoomData:FrameRoom
    ignoreMissonName?:string[]
}
interface FrameRoom{
    [roomName:string]:RoomData
}
/* 框架内房间信息，包含spawn123的名字,特殊爬虫的挂载，布局的方式 */
interface RoomData{
    name:string
    spawn1:string
    spawn2?:string
    spawn3?:string
    plan:number
    roleData:string[]
}

interface DicRoleData{
    [mykey:string]:NewCreepRoleData
}

interface globalStrcutureData{
    [structureName:string]:Structure | Structure[]
}
interface labRawMap{
    [mykey:string]:{raw1:ResourceConstant,raw2:ResourceConstant}
}

interface PathData{
    RoomPostions:string[]
    cost:number
    incomplete:boolean
}

interface TowerRangeMapData{
    [strpos:string]:ARH
}

interface ARH{
    attack:number
    repair:number
    heal:number
}

interface PowerCreepMemory{
    working?:boolean
}

interface Rvisual{
    
}


/* 挂载扩展所用模块 */
declare module NodeJS {
    // 全局对象
    interface Global {
        // 是否已挂载扩展
        hasExtension: boolean
        Mounted:boolean
        // 房间寻路键值对 以爬虫名字做键
        roomCache:{
            [creepName:string]:string
        }
        // 寻路的键值对
        routeCache:{
            // 键为路径的起点和终点 值为压缩后的路径
            [routekey:string]:string
        }
        /* pos拓展函数GetPath的寻路键值对 */
        posPath:{
            [routekey:string]:PathData
        }
        /* 房间的Tower范围伤害数据 */
        towerRangeData:{
            [routekey:string]:TowerRangeMapData
        }
        // 框架内爬虫控制键值对
        // CreepFrameControl:{
        //     [roonName:string]:DicRoleData
        // }
        /* 脚本运行总cpu */
        UsedCpu?:number
        /* 100Tick内的平均CPU */
        CpuData?:number[]
        AveCpu?:number
        CreepCpu?:{[str:string]:number}

        // 新的爬虫控制键值对
        DicCreepFrameControl:{
            [roonName:string]:DicRoleData
        }

        // 将对象全局获取，这样只用获取一次对象，不用每次都分别获取
        Stru:{
            [roomName:string]:globalStrcutureData
        }
        // 全局时间
        Gtime:{[str:string]:number}

    }
}
